package sv.com.renacempleo.web.controller.ctg;

import java.util.HashMap;
import java.util.List;
import java.util.Map;

import javax.servlet.http.HttpServletResponse;

import net.sf.json.JSONArray;

import org.springframework.stereotype.Controller;
import org.springframework.ui.ModelMap;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestMethod;
import org.springframework.web.bind.annotation.RequestParam;
import org.tuckey.web.filters.urlrewrite.utils.StringUtils;

import sv.com.renacempleo.dto.ctg.CtgCatalogo;
import sv.com.renacempleo.dto.ctg.CtgDetalleAreasConocimientos;
import sv.com.renacempleo.exception.WebException;
import sv.com.renacempleo.web.controller.BaseController;
import sv.com.renacempleo.web.util.DBContext;
import sv.com.renacempleo.web.util.WebUtilidades;

@Controller
@RequestMapping("/admin/detalleConocimientos")
public class CtgDetalleAreasConocimientosController extends BaseController{

	private static final long serialVersionUID = -530836453706969017L;
	
	@RequestMapping(value = "view", method = {RequestMethod.POST})
	public String view(ModelMap model, 
			@RequestParam (required = false) String header) {
		model.addAttribute(WebUtilidades.HEADER_TITLE, StringUtils.isBlank(header) ? "DETALLE CONICIMIENTOS" : header);
		try {
			model.put("ctgAreaConocimiento",  JSONArray.fromObject(DBContext.getCtgCatalogoDao().findAllActivesByCodigoAsArray(WebUtilidades.CTG_AREA_CONOCIMIENTOS_PADRE)));
		} catch (WebException e) {
			logger.error("view", e);
		}
		return "admin/catalogo/ctgDetalleAreaConocimiento";
	}
	
	@RequestMapping(value = "/findDetByArea", method = {RequestMethod.POST})
	public void findDetByArea(@RequestParam Long ctgAreaConocimientoId, HttpServletResponse response){
		Map<String, Object> result = new HashMap<String, Object>();
		try{
			result.put("detalleArea", JSONArray.fromObject(DBContext.getCtgDetalleAreasConocimientosDao().findDetByArea(ctgAreaConocimientoId)));
			result.put(SUCCESS, true);
			result.put(MESSAGE, "Datos obtenidos");
		}catch(WebException e){
			logger.error("Exception:", e);
			result.put(FAILURE, true);
			result.put(MESSAGE, e.getExceptionMessage());
		}catch(Exception e){
			logger.error("Exception:", e);
			result.put(FAILURE, true);
			result.put(MESSAGE, DEFAULT_ERROR_MESSAGE);
		}
		serializeObject(result, response);
	}
	

	@SuppressWarnings("unchecked")
	@RequestMapping(value = "/saveOrUpdateAll", method = {RequestMethod.POST})
	public void saveOrUpdateAll(@RequestParam String jsonString, HttpServletResponse response, @RequestParam Long ctgAreaConocimientoId){
		Map<String, Object> result = new HashMap<String, Object>();
		int success = 0;
		int failure = 0;
		List<CtgDetalleAreasConocimientos> list= (List<CtgDetalleAreasConocimientos>)JSONArray.toCollection(JSONArray.fromObject(jsonString), CtgDetalleAreasConocimientos.class);
		for (CtgDetalleAreasConocimientos ctgDetalleAreasConocimientos : list) {
			try {
				CtgCatalogo ctgAreaConocimiento = new CtgCatalogo();
				ctgAreaConocimiento.setCtgCatalogoId(ctgAreaConocimientoId);
				ctgDetalleAreasConocimientos.setCtgAreaConocimiento(ctgAreaConocimiento);
				DBContext.getBaseDao().save(ctgDetalleAreasConocimientos);
				success++;
			} catch (Exception e) {
				logger.error("Exception:", e);
				failure++;
			}
		}
		if(failure > 0){
			result.put(MESSAGE, "Datos Actualizados: <br />Exitosos: " + success + "<br />Con problemas: " + failure);
		}else result.put(MESSAGE, UPDATED_DATA);
		result.put(SUCCESS, true);
		try {
			result.put("data", JSONArray.fromObject(DBContext.getCtgDetalleAreasConocimientosDao().findDetByArea(ctgAreaConocimientoId)));
		} catch (WebException e) {
			logger.error("Exception:", e);
		}
		serializeObject(result, response);
	}
	
	@RequestMapping(value = "delete", method = {RequestMethod.POST})
	public void delete(@RequestParam Long ctgDetalleAreaConocimientoId,
			HttpServletResponse response, @RequestParam Long ctgAreaConocimientoId){
		Map<String, Object> result = new HashMap<String, Object>();
		try {
			DBContext.getCtgDetalleAreasConocimientosDao().delete(ctgDetalleAreaConocimientoId);
			result.put("data", JSONArray.fromObject(DBContext.getCtgDetalleAreasConocimientosDao().findDetByArea(ctgAreaConocimientoId)));
			result.put(SUCCESS, true);
			result.put(MESSAGE, UPDATED_DATA);
		}catch (Exception e) {
			logger.error("Exception: ", e);
			result.put(FAILURE, true);
			result.put(MESSAGE, DEFAULT_ERROR_MESSAGE);
		}
		serializeObject(result, response);
	}
	
	@RequestMapping(value = "toggle", method = {RequestMethod.POST})
	public void toggle(@RequestParam Long ctgDetalleAreaConocimientoId,
			@RequestParam String ctgDetalleAreaConocimientoActivo,
			HttpServletResponse response, @RequestParam Long ctgAreaConocimientoId){
		Map<String, Object> result = new HashMap<String, Object>();
		try {
			DBContext.getCtgDetalleAreasConocimientosDao().toggleActive(ctgDetalleAreaConocimientoId, ctgDetalleAreaConocimientoActivo);
			result.put("data", JSONArray.fromObject(DBContext.getCtgDetalleAreasConocimientosDao().findDetByArea(ctgAreaConocimientoId)));
			result.put(SUCCESS, true);
			result.put(MESSAGE, UPDATED_DATA);
		} catch (WebException e) {
			logger.error("delete", e);
			result.put(FAILURE, true);
			result.put(MESSAGE, e.getExceptionMessage());
		} catch (Exception e) {
			logger.error("delete", e);
			result.put(FAILURE, true);
			result.put(MESSAGE, DEFAULT_ERROR_MESSAGE);
		}
		serializeObject(result, response);
	}

}
